﻿using StockholmsStad.Runtime.Serialization.DataContract;

namespace StockholmsStad.Data.Interfaces
{
    /// <summary>
    /// Hanterar administration kring par
    /// </summary>
    public interface ICoupleAgent
    {
        /// <summary>
        /// Lägg till ett nytt par
        /// </summary>
        /// <param name="context">Det databascontext som operationen köra i</param>
        /// <param name="couple">Paret som ska läggas till</param>
        /// <returns>Parets nyckel</returns>
        int AddCouple(IDataContext context, Couple couple);

        /// <summary>
        /// Hämta ett par
        /// </summary>
        /// <param name="context">Det databascontext som operationen köra i</param>
        /// <param name="coupleId">Nyckeln på paret som ska hämtas</param>
        /// <returns>Paret</returns>
        Couple GetCouple(IDataContext context, int coupleId);

        /// <summary>
        /// Hämtar paret som hör till en viss användare
        /// </summary>
        /// <param name="context">Det databascontext som operationen köra i</param>
        /// <param name="userId">Nyckeln på användaren som hör till paret</param>
        /// <returns>Parets nyckel. </returns>
        int GetCoupleId(IDataContext context, int userId);

        /// <summary>
        /// Uppdaterar ett befintligt par
        /// </summary>
        /// <param name="context">Det databascontext som operationen köra i</param>
        /// <param name="coupleId">Id på paret som ska uppdateras</param>
        /// <param name="couple">Paret som ska uppdateras</param>
        /// <returns>Paret</returns>
        void UpdateCouple(IDataContext context, int coupleId, Couple couple);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="context">Det databascontext som operationen köra i</param>
        /// <param name="recipientEmail"></param>
        /// <param name="ticket"></param>
        void RemindCoupleOfImpedimentDocMail(IDataContext context, string recipientEmail, Ticket ticket);
    }
}